\begin{frame}
	\frametitle{Inhaltsverzeichnis}
	\tableofcontents %[hideallsubsections]
	\label{kap:project}
\end{frame}

\section[Intro]{Einführung}
\begin{frame}
	\frametitle{\insertsection}
	\begin{itemize}
		\item Ziel war die Erweiterung des Book-Writer Skeletons um eine Suchfunktion
		\item Es sind 2 verschiedene Arten von Suche implementiert:
		\begin{itemize}
			\item \emph{SimpleSearch} nach Google-Vorbild, gesucht wird nach einem oder mehreren Suchbegriffen
			\item \emph{ExtendedSearch}, die die Suchergebnisse einschränkt (z.B. nach Titel, Autor oder Erscheinungsjahr)
		\end{itemize}
	\end{itemize}
\end{frame}

\section{Projektmanagement}
\begin{frame}
	\frametitle{\insertsection}
	\begin{description}
		\item[Tools:] Rubymine, Firefox inklusive Dev. Tools, Internet Explorer inklusive Dev. Tools, Ruby, SQLite3
		\item[SVN:] TortoiseSVN zusammen mit GoogleCode Repository
		\item[Organisation:] Während Entwicklung wöchentliches, persönliches Treffen zum Planen/Besprechen, ansonsten per Email/ICQ
	\end{description}
	
	\begin{figure}[h]
		\centering
		\fbox{
			\includegraphics[width=0.95\textwidth]{Bilder/Zeitplan.png}
		}
		\caption{Projekt Zeitplan}
		\label{fig:timetable}
	\end{figure}
\end{frame}

\section{Szenario}
\begin{frame}
	\frametitle{\insertsection}
	\begin{itemize}
		\item Gewähltes Ziel: Umsetzung der Suchfunktion
		\item Szenario:
		\begin{itemize}
			\item Der Nutzer meldet sich mit Benutzernamen \& Passwort an, Absicht: verschiedene, in der Datenbank des BookWriters abgelegte Bücher suchen.
			\item Dazu: Betätigung des auf einer beliebigen Webseite der Anwendung den im oberen rechen Bereich zu findenden Knopf „Öffne Suche“.
			\item Daraufhin im Suchdialog: Eingabe eines Suchbegriffs $\rightarrow$ Anzeige einer Liste mit allen Büchern, die mit dem Suchbegriff in Verbindung gebracht werden (per AJAX geladen).
			\item Pro Treffer: Die wichtigsten Informationen zum Buch sowie ein Link, mit dessen Hilfe der Nutzer das jeweilige Buch einsehen kann
			\item Durch einen Knopf „Erweitert“: dedizierte Suche nach einzelnen Suchkriterien: Buchtitel und –Erscheinungsdatum, Autoren, Tags und Kapitelnamen
		\end{itemize}
	
	\end{itemize}
\end{frame}

\section[Suche]{Anwendung Suche}
\begin{frame}
	\frametitle{\insertsection}
	\begin{itemize}
		\item \emph{Suche Öffnen}-Button öffnet oder schließt das Suchfenster
		\item \emph{Erweitern}-Button im Suchfenster erweitert oder minimiert die Eingabemaske
		\item \emph{Such}-Button startet suche nach Keyword(s)
		\item Bei der erweiterten Suche gibt es die Möglichkeit, die Keywords zu ver\emph{und}en oder zu ver\emph{oder}n
	\end{itemize}
\end{frame}

\section[Frontend]{Suche-Frontend}
\begin{frame}[allowframebreaks]
	\frametitle{\insertsection}

	\begin{itemize}
		\item View Interaktion komplett in Javascript geschrieben
		\item Suchbegriffe werden als URL-Parameter per AJAX-Request an die serverseitige Komponente übertragen
		\item Suchergebnis-View ist Mischung aus Javascript und ERB-Templates
		\item Letztere liefern HTML-Fragmente, die in die Seite eingebettet werden
	\end{itemize}

	\begin{figure}[h]
		\fbox{
			\includegraphics[width=1.0\textwidth]{Bilder/RawHome.png}
		}
		\caption{Home View der Book-Writer Anwendung}
		\label{fig:homeview}
	\end{figure}
	
	\begin{figure}[h]
		\fbox{
			\includegraphics[width=1.0\textwidth]{Bilder/SimpleSearch.png}
		}
		\caption{Simple Suche der Book-Writer Anwendung}
		\label{fig:simpleSearch}
	\end{figure}
	
	\begin{figure}[h]
		\fbox{
			\includegraphics[width=1.0\textwidth]{Bilder/ExtendedSearch.png}
		}
		\caption{Erweiterte Suche der Book-Writer Anwendung}
		\label{fig:extendedSearch}
	\end{figure}

	\begin{figure}[h]
		\fbox{
			\includegraphics[width=1.0\textwidth]{Bilder/SearchResults.png}
		}
		\caption{Suchergebnisse der Book-Writer Anwendung}
		\label{fig:sucheergebnisse}
	\end{figure}
\end{frame}

\section{Suche-Backend}
\begin{frame}
	\frametitle{\insertsection}
	
	\begin{itemize}
		\item Realisierung der Suche mithilfe des Gems \emph{Arel}
		\begin{itemize}
			\item Ermöglicht die Erstellung von SQL-Anfragen durch mitgelieferte Methoden
			\item Dadurch kein SQL im Quellcode
		\end{itemize}
	\end{itemize}
\end{frame}

\subsection{Einfache Suche}
\begin{frame}[allowframebreaks]
	\frametitle{\insertsubsection}
	\framesubtitle{\insertsection}
	
	\begin{itemize}
		\item Methode \emph{search} in \emph{books\_controller.rb}
		\item Reagiert auf HTTP-GET-Anfragen an \emph{books/search}
		\item Such-Zeichenkette wird entgegengenommen und in ein Array einzelner Begriffe zerlegt
		\item Für jedes Wort im Array: 
		\begin{itemize}
		\item \small {Suche in der Books-Tabelle}
		\item \small {Suche in der User-Tabelle (Autorensuche)}
		\item \small {Suche in der Chunk-Tabelle}
		\end{itemize}
	\end{itemize}
	
	\begin{figure}[h]
		\fbox{
			\includegraphics[width=0.95\textwidth]{Bilder/Ablauf.png}
		}
		\caption{Ablauf der (einfachen) Buch-Suche}
		\label{fig:sequence}
	\end{figure}
\end{frame}

\subsection{Erweiterte Suche}
\begin{frame}
	\frametitle{\insertsubsection}
	\framesubtitle{\insertsection}
	
	\begin{itemize}
		\item Methode \emph{search\_extended} in \emph{books\_controller.rb}
		\item Per HTTP-GET an \emph{books/searchext}, übergebene Such-Parameter werden ausgewertet
		\item Falls Parameter vorhanden (z.B. title != "'"') wird dieser per \emph{Arel} in der Suche berücksichtigt 
		\item \emph{Und}-/\emph{Oder}-Verknüpfung der vorhandenen Such-Parameter
	\end{itemize}
\end{frame}

\subsection[Backend]{Suchergebnisse}
\begin{frame}
	\frametitle{\insertsubsection}
	\framesubtitle{\insertsection}
	
	\begin{itemize}
		\item Ergebnis der jeweiligen Suche: Liste mit Books-Objekten
		\item Rückgabe der Liste als JSON-Array an das Frontend
		\item Alternativ dazu: Übergabe der Suchergebnisse an das Template \emph{search.html.erb} 
		\item Dort werden die Ergebnisse in einer Tabelle aufgeführt und als HTML-Fragment an das Frontend geliefert
	\end{itemize}
\end{frame}
